package com.keai.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.keai.dao.MemberDao;
import com.keai.pojo.Member;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class MemberServiceImpl implements MemberService {
    @Autowired
    MemberDao memberDao;

    @Override
    public Member findByTelephone(String telephone) {
        return memberDao.findByTelephone(telephone);
    }

    @Override
    public void add(Member member) {
        memberDao.add(member);
    }

    @Override
    public Map<String, Object> getMemberReport() {
        List<String> months = new ArrayList<>();
        List<Long> memberCount = new ArrayList<>();
        //获取前12个月份
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, -12);
        for (int i = 0; i < 12; i++) {
            calendar.add(Calendar.MONTH, 1);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
            String date = simpleDateFormat.format(calendar.getTime());
            months.add(date);
        }
        //统计每个月份对应的会员数量
        for (String month : months) {
            month += "-31"; // 2018-9-31
            long count = memberDao.findCountBeforeByDate(month);
            memberCount.add(count);
        }

        Map<String,Object> map = new HashMap<>();
        map.put("months", months);
        map.put("memberCount", memberCount);

        return map;
    }

    @Override
    public Map<String, Object> getMemberReportBySex() {
        //根据男女获取所有的会员数据
        List<Map<String,Object>> memberCount =memberDao.getMemberReportBySex();
        //创建一个List集合，用于获取mapList中的name属性
        List<Object>  memberName=new ArrayList<>();
        //遍历mapList集合
        for (Map<String, Object> map : memberCount) {
            Object sex = map.get("name");
            if (sex==null){
                sex="不限";
                map.put("name","不限");
            }
            if (sex.equals("1")){
                sex="男";
                map.put("name","男");
            }
            if (sex.equals("2")){
                sex="女";
                map.put("name","女");
            }
            memberName.add(sex);
        }

        Map<String,Object> memberMap=new HashMap<>();
        memberMap.put("memberName",memberName);
        memberMap.put("memberCount",memberCount);
        return memberMap;
    }

    @Override
    public Map<String, Object> getMemberReportByAge() {
        //因为要获取会员的出生日期，只有通过获取所有的会员身份证信息，通过截取获得年份。
        List<Member> memberList= memberDao.findAllMemberIdCard();

        //定义一个List<Map<String,Object>>集合用于存储memberCount属性信息。
        List<Map<String,Object>> memberCount =new ArrayList<>();

        //定义一个Map集合，用于存储，每个年龄段的信息
        Map<String,Object> memberMap1=new HashMap<>();
        //定义一个Map集合，用于存储，每个年龄段的信息
        Map<String,Object> memberMap2=new HashMap<>();
        //定义一个Map集合，用于存储，每个年龄段的信息
        Map<String,Object> memberMap3=new HashMap<>();
        //定义一个Map集合，用于存储，每个年龄段的信息
        Map<String,Object> memberMap4=new HashMap<>();
        //定义一个List<Object>集合用于存储memberName属性信息。
        List<Object> memberName=new ArrayList<>();

        //遍历集合，获取每一个身份证信息。
        //定义四个变量，用于记录各个年龄段的人数
        int num1=0;
        int num2=0;
        int num3=0;
        int num4=0;
        for (Member member : memberList) {
            String idCard = member.getIdCard();
            //获取每个身份证的年份，通过截取获得。第7-10位为出生年分。
            int  memeberYear = Integer.parseInt(idCard.substring(6, 10));
            //            //获取当前日期的年份。
            int newYear = Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date()));
            //相减获取年龄
            int memberBirthday =newYear-memeberYear;
            //判断年龄段0-18。
            if (memberBirthday>0&&memberBirthday<=18){
                memberMap1.put("name","0-18岁");
                memberMap1.put("value",num1++);
            }
            //判断年龄段18-30。
            if (memberBirthday>18&&memberBirthday<=30){
                memberMap2.put("name","18-30岁");
                memberMap2.put("value",num2++);
            }
            //判断年龄段30-45。
            if (memberBirthday>30&&memberBirthday<=45){
                memberMap3.put("name","30-45岁");
                memberMap3.put("value",num3++);
            }
            //判断年龄段45以上。
            if (memberBirthday>45){
                memberMap4.put("name","45岁以上");
                memberMap4.put("value",num4++);
            }
        }
        //把年龄数据存储到memberCount集合中。
        memberCount.add(memberMap1);
        memberCount.add(memberMap2);
        memberCount.add(memberMap3);
        memberCount.add(memberMap4);
        //把name数据添加到memberName集合中
        for (Map<String, Object> map : memberCount) {
            Object name = map.get("name");
            memberName.add(name);
        }
        //定义ResultMap集合，返回数据。
        Map<String,Object> resultMap =new HashMap<>();
        resultMap.put("memberName",memberName);
        resultMap.put("memberCount",memberCount);
        return resultMap;
    }

}
